package nowcoder;

import java.util.ArrayDeque;
import java.util.Scanner;

/**
 * @author shhjiang_001
 * @create 2020-06-28 15:17
 */

       /*
        给定N（可选作为埋伏点的建筑物数）、D（相距最远的两名特工间的距离的最大值）以及可选建筑的坐标，计算在这次行动中，大锤的小队有多少种埋伏选择。
        注意：
        1. 两个特工不能埋伏在同一地点
        2. 三个特工是等价的：即同样的位置组合(A, B, C) 只算一种埋伏方法，不能因“特工之间互换位置”而重复使用
        输出描述:

        一个数字，表示不同埋伏方案的数量。结果可能溢出，请对 99997867 取模

        示例1
        输入

        4 3
        1 2 3 4

        输出

        4
        */



public class Testnk02 {
    static int res = 0;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] ints = new int[n];
        for (int i = 0; i < n; i++) {
            ints[i] = sc.nextInt();
        }
        for (int i = 0; i < n; i++) {
            ArrayDeque<Integer> list = new ArrayDeque<>();
            list.push(ints[i]);
            method(ints,m,i,list);
        }
        System.out.println(res);
    }

    private static void method(int[] ints, int m, int i, ArrayDeque<Integer> list) {
        if (list.size() == 3){
            res++;
            return;
        }
        for (int j = i; j < ints.length; j++) {
            if (j+1 < ints.length && ints[j+1]-list.getLast() <= m){
                list.push(ints[j+1]);
                method(ints,m,j+1,list);
                list.pop();
            }else {
                break;
            }
        }

    }
}
